/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uy.edu.ort.gestionareasriesgo.beans;

import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import uy.edu.ort.gestionareasriesgo.entidades.Accidente;
import uy.edu.ort.gestionareasriesgo.entidades.AreaRiesgo;
import uy.edu.ort.gestionareasriesgo.entidades.PersonalAfectado;
import uy.edu.ort.gestionareasriesgo.persistencia.HelperPersistencia;

/**
 *
 * @author Mattahari
 */
public class BeanAccidentes {

    /**
     * Creates a new instance of BeanAccidentes
     */
    public BeanAccidentes() {
        inicializarElementosAGuardar();
//        inicializarListaNivelesImpacto();
        inicializarAreasRegistradas();
    }
    //<editor-fold desc="Atributos">
    private Accidente accidenteActual;
    private PersonalAfectado personalAfectadoActual;
    private List<PersonalAfectado> personalAfectadoAGuardar;
    private List<String> listaNivelesImpacto;
    private List<AreaRiesgo> areasRegistradas;
    private List<String> seleccionAreasRegistradas;

    //</editor-fold>
    //<editor-fold desc="Getters & Setters">
    public Accidente getAccidenteActual() {
        return accidenteActual;
    }

    public void setAccidenteActual(Accidente accidenteActual) {
        this.accidenteActual = accidenteActual;
    }

    public PersonalAfectado getPersonalAfectadoActual() {
        return personalAfectadoActual;
    }

    public void setPersonalAfectadoActual(PersonalAfectado personalAfectadoActual) {
        this.personalAfectadoActual = personalAfectadoActual;
    }

    public List<PersonalAfectado> getPersonalAfectadoAGuardar() {
        return personalAfectadoAGuardar;
    }

    public void setPersonalAfectadoAGuardar(List<PersonalAfectado> personalAfectadoAGuardar) {
        this.personalAfectadoAGuardar = personalAfectadoAGuardar;
    }

    public List<String> getListaNivelesImpacto() {
        return listaNivelesImpacto;
    }

    public List<String> getSeleccionAreasRegistradas() {
        return seleccionAreasRegistradas;
    }

    //</editor-fold>
    //<editor-fold desc="Inicializacion">
    private void inicializarElementosAGuardar() {
//        personalAfectadoAGuardar = new ArrayList<PersonalAfectado>();
        accidenteActual = new Accidente();
//        personalAfectadoActual = new PersonalAfectado();
    }

    private void inicializarListaNivelesImpacto() {
        listaNivelesImpacto = new ArrayList<String>();
        listaNivelesImpacto.add("Fallecimiento");
        listaNivelesImpacto.add("Heridas Graves");
        listaNivelesImpacto.add("Heridas Leves – Necesita Hospitalizacion");
        listaNivelesImpacto.add("Heridas Leves – Sin Hospitalizacion");
        listaNivelesImpacto.add("Sin Heridas");
    }

    private void inicializarAreasRegistradas() {
        areasRegistradas = HelperPersistencia.obtenerAreasRiesgo();
        seleccionAreasRegistradas = new ArrayList<String>();
        for (AreaRiesgo area : areasRegistradas) {
            seleccionAreasRegistradas.add(area.getCodigoArea());
        }
    }
    //</editor-fold>
    //<editor-fold desc="Guardar">

    private boolean validarGuardar() {
        if (accidenteActual.getCodigo() == null || accidenteActual.getCodigo().equals("")) {
            FacesMessage mensaje = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "El codigo de accidente no puede ser vacio");
            FacesContext.getCurrentInstance().addMessage(null, mensaje);
            return false;
        }
        if (HelperPersistencia.existeAccidente(accidenteActual.getCodigo())) {
            int numero = 1;
            String nombre = accidenteActual.getCodigo();
            while (HelperPersistencia.existeAreaRiesgo(accidenteActual.getCodigo())) {
                accidenteActual.setCodigo(nombre + "_" + (numero < 10 ? "0" : "") + numero);
            }
            FacesMessage mensaje = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "El codigo de accidente ya existe");
            FacesContext.getCurrentInstance().addMessage(null, mensaje);
            return false;
        }
        if (accidenteActual.getDia()== null) {
            FacesMessage mensaje = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "La fecha de accidente no puede ser vacia");
            FacesContext.getCurrentInstance().addMessage(null, mensaje);
            return false;
        }       
        return true;
    }

    public void guardarAccidente() {
        if (validarGuardar()) {
            actualizarNumeroAfectados();
            HelperPersistencia.guardarGenerico(accidenteActual);
            //Volver todo a estado inicial
            inicializarElementosAGuardar();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Exito", "Accidente guardado"));
        }
    }

    public void guardarPersonalAfectado() {
        //Asignar al accidente mediante la lista
        personalAfectadoAGuardar.add(personalAfectadoActual);
        personalAfectadoActual = new PersonalAfectado();
    }
    //</editor-fold>    
    //<editor-fold desc="Utiles">

    public void actualizarNumeroAfectados() {
        int numeroAfectados = 0;
        numeroAfectados += accidenteActual.getFallecimiento();
        numeroAfectados += accidenteActual.getHeridasGraves();
        numeroAfectados += accidenteActual.getHeridasLevesNecesitaHospitalizacion();
        numeroAfectados += accidenteActual.getHeridasLevesSinHospitalizacion();
        numeroAfectados += accidenteActual.getSinHeridas();
        accidenteActual.setCantidadPersonalInvolucrado(numeroAfectados);
    }
    //</editor-fold>
}
